package org.itstack;

import org.itstack.state.StatePatternDemo;
import org.itstack.state.order.OrderStatePatternDemo;

/**
 * 状态模式演示程序
 * 展示状态模式的基本用法和设计思想
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println("=== 状态模式演示程序 ===");
        
        // 基本状态模式演示
        System.out.println("\n【第一部分：基础状态模式】");
        StatePatternDemo.demonstrateStatePattern();
        StatePatternDemo.demonstrateStateCycle();
        StatePatternDemo.demonstrateMultipleContexts();
        
        // 订单状态模式演示
        System.out.println("\n【第二部分：订单状态模式】");
        OrderStatePatternDemo.demonstrateNormalOrderFlow();
        OrderStatePatternDemo.demonstrateOrderCancellation();
        OrderStatePatternDemo.demonstrateInvalidOperations();
        OrderStatePatternDemo.demonstrateMultipleOrders();
        
        System.out.println("\n=== 状态模式演示完成 ===");
        
        // 设计模式说明
        System.out.println("\n=== 设计模式说明 ===");
        System.out.println("状态模式（State Pattern）是一种行为型设计模式，");
        System.out.println("它允许对象在内部状态改变时改变它的行为。");
        System.out.println("\n核心组件：");
        System.out.println("1. State接口 - 定义状态的基本行为");
        System.out.println("2. ConcreteState - 具体状态实现类");
        System.out.println("3. Context - 上下文类，维护当前状态");
        System.out.println("\n设计原则：");
        System.out.println("- 单一职责：每个状态类只负责一种状态的行为");
        System.out.println("- 开闭原则：新增状态无需修改现有代码");
        System.out.println("- 依赖倒置：上下文依赖抽象状态接口");
        System.out.println("\n订单状态模式特点：");
        System.out.println("- 清晰的状态转换规则");
        System.out.println("- 操作权限控制");
        System.out.println("- 状态历史记录");
        System.out.println("- 业务逻辑封装");
    }
}
